package com.example.demo.test;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;

public class TimestampExample {
    public static void main(String[] args) {
        // 获取当前北京时间对应的LocalDateTime对象
        LocalDateTime beijingDateTime = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
        // 将LocalDateTime转换为Instant对象，Instant表示时间线上的一个瞬时点
        Instant instant = beijingDateTime.toInstant(ZoneOffset.of("+08:00"));
        // 获取从1970年1月1日00:00:00 UTC到当前时间点的毫秒数，也就是Unix时间戳（精确到毫秒）
        long timestamp = instant.toEpochMilli();
        System.out.println("timestamp = " + timestamp);

        long now = LocalDateTime.now(ZoneId.of("Asia/Shanghai")).toEpochSecond(ZoneOffset.of("+08:00"));
        System.out.println("now = " + now);
        // 由于Unix时间戳常规是10位，这里要精确到毫秒所以是13位，在10位基础上乘以1000并加上毫秒数部分
        long thirteenDigitTimestamp = now * 1000 + System.currentTimeMillis() % 1000;
        System.out.println("当前北京时间的13位Unix时间戳（精确到毫秒）: " + thirteenDigitTimestamp);
    }
}